﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using BDSUETableAdapters;

/// <summary>
/// Clase de control para la gestion de procesos de selección permite Asiganar, desasignar practicantes de un proceso de selección
/// Permite consultar procesos de selección dado el identificador de una  práctica, como tambien un proceso de
/// selección especfico.
/// Tambien permite la modificación de los datos de un proceso de selección.
/// /// la comunicación con la base de datos se realiza se realiza atraves del tablaAdapter ProcesoSeleccionTableAdapter
/// </summary>
public class GestionarProcesosSeleccion
{
	public GestionarProcesosSeleccion()
	{
		//
		// TODO: Agregar aquí la lógica del constructor
		//
	}

    /// <summary>
    /// Metodo para asignar un practicante a un proceso de selección de una práctica especfica, 
    /// especificando la tarea que agrupa las hojas de vida.
    /// </summary>
    /// <param name="idPractica">(int) Identificador de la práctica para relacionar el proceso de selección</param>
    /// <param name="idTarea">(int) Identificador de la tarea (Hoja de vida)</param>
    /// <param name="nombreUsuario">(string) nombre de usuario del practicante que sera asignado al proceso de selección</param>
    /// <returns>true si es posible realizar la inserción, en caso contrario false</returns>


    public bool AsignarProceso(int idPractica, int idTarea, string nombreUsuario)
    {

        try
        {
            ProcesoSeleccionTableAdapter proceso = new ProcesoSeleccionTableAdapter();
            proceso.Guardar(idPractica, idTarea, nombreUsuario, "", "", "", "");
            return true;
        }
        catch
        { return false;}
    }

    /// <summary>
    /// Metodo para desasignar un practicante de un proceso de selección de una práctica
    /// </summary>
    /// <param name="idProcesoSeleccion">(int) Identificador del proceso de selección a eliminar</param>
    /// <returns></returns>
    public bool DesasignarProceso(int idPractica, string nombreUsuario)
    {
        try
        {
            ProcesoSeleccionTableAdapter proceso = new ProcesoSeleccionTableAdapter();
            proceso.Eliminar(idPractica, nombreUsuario);
            return true;
        }
        catch { return false; }
    }
    /// <summary>
    /// metodo para modificar los datos de un proceso de selección individual  dado un identifidor del proceso de selección
    /// </summary>
        /// <param name="estadoHojaVida">(string) estado de la hoja de vida "Aceptada" o "Rechazada"</param>
    /// <param name="estadoSeleccion">(string) estado de selección de practicante por parte de la empresa "Seleccionado" o "No seleccionado"</param>
    /// <param name="estadoAceptacion">(string) estado de aceptacion por parte del practicante "Acepto" o "Rechazo"</param>
    /// <param name="idProcesoSeleccion">(int) Identificador del proceso de selección para realizar la modificación</param>
    /// <returns>true si es posible realizar la modificación, en caso contrario false</returns>
    /// 
    public bool ModProcesoSeleccion(string estadoHojaVida, string estadoSeleccion, string estadoAceptacion, int idProcesoSeleccion)
    {
        try
        {
            ProcesoSeleccionTableAdapter proceso = new ProcesoSeleccionTableAdapter();
            proceso.Actualizar(estadoHojaVida, estadoSeleccion, estadoAceptacion, idProcesoSeleccion);
            return true;
        }
        catch { return false; }
    }

    /// <summary>
    /// metodo para modificar el identificador de la tarea, dado el identificador de la tareas
    /// se modifican todos los campos del proceso de selección que concuenrden con el identificador 
    /// de la práctica    /// 
    /// </summary>
    /// <param name="idTarea">(int) Nuevo identificador de la tarea a modificar</param>
    /// <param name="idPractica">(int) Identificador de la practica a la cual se le cambiara la tarea</param>
    /// <returns>true si es posible realizar la modificación, en caso contrario false</returns>
    public bool ModTareaProcesoSeleccion(int idTarea, int idPractica)
    {
        try
        {
            ProcesoSeleccionTableAdapter proceso = new ProcesoSeleccionTableAdapter();
            proceso.ActualizarTarea(idTarea, idPractica);
            return true;
        }
        catch { return false; }
    }

    /// <summary>
    /// metodo para obtener un proceso de selección especifico, dado el identificador de este.
    /// </summary>
    /// <param name="idProcesoSeleccion">(int) identificador del proceso de selección a buscar</param>
    /// <returns>DataTable con el resultado encontrado</returns>

    public DataTable ObtProcesoEspecifico(int idProcesoSeleccion)
    {
        ProcesoSeleccionTableAdapter proceso = new ProcesoSeleccionTableAdapter();
        return proceso.ObtEspecifico(idProcesoSeleccion);
    }

    /// <summary>
    /// metodo para obtener todos los procesos de seleccíon o todos los de una práctica especifica.
    /// </summary>
        /// <param name="idPractica"></param>
    /// <param name="tipoBusqueda"></param>
    /// <returns></returns>

    public DataTable BusquedaAvanazada(int idPractica, string tipoBusqueda)
    {
        ProcesoSeleccionTableAdapter proceso = new ProcesoSeleccionTableAdapter();
        if(tipoBusqueda == "Practica")
        {
            DataTable dtFiltrado = new DataTable();
            DataRow[] dtrow;
            string filtro = "Practica_idPractica =" + idPractica;
            DataTable dt = proceso.ObtTodos();
            dtFiltrado = dt.Clone();
            dtrow = dt.Select(filtro);
            foreach (DataRow dtr in dtrow)
            {
                dtFiltrado.ImportRow(dtr);

            }
            return dtFiltrado;
        }
        else
        {
            return proceso.ObtTodos();  
        }
    }
}
